package com.cmyshare.design.facadePattern;

/**
 * @version 1.0
 * @Author cmy
 * @Date 2024/1/31 14:16
 * @desc Facade外观类，知道哪些子系统类负责处理请求。 将客户的请求代理给适当的子系统对象。
 */

public class Facade {

    /**
     * 处理由Facade外观类对象指派的任务。 没有facade的任何相关信息；即没有指向facade的指针。
     */
    ServiceA sa;
    ServiceB sb;
    ServiceC sc;

    /**
     * Facade外观类无参构造，实例化Subsystemclasses子系统实现类
     */
    public Facade() {
        sa = new ServiceAImpl();
        sb = new ServiceBImpl();
        sc = new ServiceCImpl();
    }

    //任务A
    public void methodA() {
        sa.methodA();
        sb.methodB();
    }

    //任务B
    public void methodB() {
        sb.methodB();
        sc.methodC();
    }

    //任务C
    public void methodC() {
        sc.methodC();
        sa.methodA();
    }
}
